package com.example.parent.bookmanage_redis.entity;

import org.springframework.data.annotation.Id;
import org.springframework.data.redis.core.RedisHash;
import org.springframework.data.redis.core.index.Indexed;

/**
 * 用户实体类（集成Redis缓存）
 * 使用Spring Data Redis注解定义与Redis的映射关系
 * 用于存储和缓存用户的基本信息
 */
@RedisHash("user") // 标识该类将存储在Redis中，"user"为Redis中的哈希表名称前缀
public class User {

    /**
     * 用户唯一标识ID
     * 作为Redis哈希表中的键（Hash Key）
     */
    @Id // 标识该字段为Redis中的主键（用于唯一标识哈希表中的条目）
    private Integer id;

    /**
     * 用户名
     * 添加索引以便基于用户名进行查询
     */
    @Indexed // 为该字段创建Redis索引，支持基于name字段的查询操作
    private String name;

    /**
     * 全参构造方法
     * 用于创建包含所有属性的User对象
     *
     * @param id   用户ID
     * @param name 用户名
     */
    public User(Integer id, String name) {
        this.id = id;
        this.name = name;
    }

    /**
     * 无参构造方法
     * Spring Data Redis在反序列化时需要无参构造方法
     */
    public User() {
    }

    /**
     * 重写toString方法
     * 用于对象的字符串表示，方便日志输出和调试
     *
     * @return 包含用户所有属性的字符串
     */
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }

    // 以下为各属性的getter和setter方法

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}